/**
 * @param {string} s
 * @return {number[]}
 */
var partitionLabels = function (s) {
  //每个字符的最后出现位置
  const lastMergePos = new Array(26)
  //数组: 存储子串的长度
  let res = []

  //统计每个字符的最后出现位置
  for (let i = 0; i < s.length; i++) {
    //计算当前字符s[i]的最后出现位置
    let index = s[i].charCodeAt(0) - 97
    lastMergePos[index] = i
  }

  //分隔出子串,存入数组res
  let start = 0, end = 0
  for (let i = 0; i < s.length; i++) {
    //读取当前字符s[i]的最后出现位置
    let index = s[i].charCodeAt(0) - 97
    end = Math.max(end, lastMergePos[index])
    //如果当前索引i正好是end
    if (end === i) {
      //计算字串长度,存入res
      res.push(end - start + 1)
      //更新start的位置
      start = i + 1
    }
  }

  //返回结果数组
  return res
};
